package jt.classic.system.workflow;

import jt.classic.system.group.IGroup;
import jt.classic.system.user.IUser;

import org.limp.basework.SimpleBean;

import org.limp.mine.annex.AnnexInfo;

import java.util.List;


/**
 * 流转实例接口
 *
 * @author bizkit
 *
 */
public interface WInstance extends SimpleBean {
    /**
     * 实例ID
     * @return String
     */
    public String id();

    /**
     * 流转类别
     *
     * @return WFlow
     */
    public WFlow iflow();

    /**
     * �?始时�?
     *
     * @return String
     */
    public String istarttime();

    /**
     * 结束时间
     *
     * @return String
     */
    public String iendtime();

    /**
     * 办理时限
     *
     * @return String
     */
    public String ilmtime();

    /**
     * 实例状�??(-2撤销,-1暂停,0未完�?,1已结�?,2已归�?)
     *
     * @return int
     */
    public int istate();

    /**
     * 创建人ID
     * @return String
     */
    public String icreatorid();

    /**
     * 创建人姓�?
     * @return String
     */
    public String icreatorname();

    /**
     * 创建�?
     * @return
     */
    public IUser icreator();

    /**
     * 单位id
     * @return String
     */
    public String iunitid();

    /**
     * 单位名称
     * @return String
     */
    public String iunitname();

    /**
     * 创建人所在单�?
     * @return IGroup
     */
    public IGroup iunit();

    /**
     * 唯一序列号(不同于主键,在实例产生前就已生成,用于关联正文,编号)
     * @return String
     */
    public String isequence();

    /**
     * 实例编号
     * @param WNumber
     */
    public WNumber inumber();

    /**
     * 正文
     * @return AnnexInfo
     */
    public AnnexInfo idoc();

    /**
     * 活动记录列表
     * @return List
     */
    public List iactivitylist();

    /**
     * 指定活动记录子活动记录列�?
     * @param aid 活动记录ID
     * @return List
     */
    public List iactivitylist4mychildren(String aid);

    /**
     * 活动记录
     * @param id 活动记录ID
     * @return WActivity
     */
    public WActivity iactivity(String id);

    /**
     * �?大活动记�?(非传阅记�?)
     * WActivity
     * @return
     */
    public WActivity imaxactivity();

    /**
     * 流程是否在内部流转环节
     * @return boolean
     */
    public boolean ininner();

    /**
     * 流程当前所在的内部流转
     * @return WInner
     */
    public WInner inowinner();

    /**
     * 内部流转全部完成
     * @param inner 内部流转
     * @param process 过程
     * @return boolean
     */
    public boolean innerisok(int inner, String process);

    /**
     * 内部流转活动记录列表
     * @param inner 环节类别
     * @return List
     */
    public List iactivitylistinner(int inner);

    /**
     * 内部流转活动记录列表
     * @param inner 环节类别
     * @param process 记录过程
     * @return List
     */
    public List iactivitylistinner(int inner, String process);

    /**
     * 内部流转活动记录列表
     * @param inner 环节类别
     * @param process 记录过程
     * @param group 记录分组
     * @return List
     */
    public List iactivitylistinner(int inner, String process, String group);

    /**
     * 同过程其它分组活动是否都完成
     * @param inner 内部流转
     * @param process 过程
     * @param group 分组
     * @return boolean
     */
    public boolean iotherinnerisok(int inner, String process, String group);

    /**
     * 同过程其它分组活�?
     * @param inner 内部流转
     * @param process 过程
     * @param group 分组
     * @return List
     */
    public List iotherinner(int inner, String process, String group);

    /**
     * 同过程其它分组活�?(�?后流转记�?)
     * @param inner 内部流转
     * @param process 过程
     * @param group 分组
     * @return List
     */
    public List iotherinner4out(int inner, String process, String group);

    /**
     * 同过程分组活�?(�?后流转记�?)
     * @param inner 内部流转
     * @param process 过程
     * @return List
     */
    public List inner4out(int inner, String process);

    /**
     * 内部流转(过程分组)结束时活动记�?
     * @param inner�?内部流转
     * @param process�?过程
     * @param group�?分组
     * @return WActivity
     */
    public WActivity inner4out(int inner, String process, String group);

    /**
     * 内部流转活动记录(刚进入内部流转的记录)
     * @param inner 内部流转
     * @param process 过程
     * @return List
     */
    public List inner4in(int inner, String process);

    /**
     * 同过程其它分组活�?(刚进入内部流转的记录)
     * @param inner 内部流转
     * @param process 过程
     * @param group 分组
     * @return List
     */
    public List iotherinner4in(int inner, String process, String group);

    /**
     * 进入内部流转前活动记�?
     * @param inner 内部流转
     * @param process 过程
     * @return WActivity
     */
    public WActivity inner4before(String process);

    /**
     * 内部流转过程分组
     * @param inner 内部流转
     * @param process 过程
     * @return String[]
     */
    public String[] innerprocessgroup(int inner, String process);

    /**
     * 内部流转过程
     * @param inner 内部流转
     * @return String[]
     */
    public String[] innerprocess(int inner);

    /**
     * 实例信息xml
     * @param type {xml使用类型,0:提供给流程跟踪图使用}
     * @return String
     */
    public String toXML(int type);
}
